package com.qfedu.boot.aop;

import com.qfedu.boot.util.FileUtil;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.springframework.stereotype.Component;

import java.io.*;

/**
 * @Author LiHao
 * @Description 记录日志
 * @Date 13:39 2022/11/26
 * @Param
 * @return
 */
// @Aspect
@Component
public class SqlLogAspect {
    @Around("execution(* com.qfedu.boot.service.impl.*.*(..))")
    public Object q(ProceedingJoinPoint invocation) throws Throwable {
        //记录日志文件 一个月一个新文件 文件名采用日期格式 202211.txt 日志文件保存半年
        //1.记录开始的日志
        StringBuffer buffer=new StringBuffer();
        long s=System.currentTimeMillis();
        System.out.println("------------");
         System.out.println(invocation.getKind());

        String m=invocation.getSignature().toString();
        System.out.println("---------");
        buffer.append(m+" 开始执行 \r");
        //2.执行原方法
        Object obj=null;
        try{
            obj=invocation.proceed();
            //3.记录执行日志
            buffer.append(m+" 执行成功，"+"  耗时："+(System.currentTimeMillis()-s+" 毫秒")+" \r");
        }catch (Exception e){
            //4.记录错误日志
            ByteArrayOutputStream baos = new ByteArrayOutputStream();
            e.printStackTrace(new PrintStream(baos));
            String exception = baos.toString();
            buffer.append(m + "执行失败，" + exception + " \r");
        }finally {
            //5.记录本次执行的日志
            File file= FileUtil.createLog("logs");
            BufferedWriter writer=new BufferedWriter(new FileWriter(file,true));
            writer.write(buffer.toString());
            writer.close();
        }
        return obj;
    }
}
